package kr.co.cherryt.parser.xml;

import java.util.ArrayList;

public class XmlItem {
		
	private ArrayList<XmlElement> m_arElement = null;
	private Object m_tagObj = null;
	private Object m_tagObjEx = null;
	
	private int m_nTag = -1;
	
	

	XmlItem(){
		init(0);
	}

	XmlItem(int nCapa){
		init(nCapa);
	}

	/**
	 * 생성자에서 호출되는 초기화 함수
	 * @param nCapa : Capacitiy 설정 여부, 0이면 설정하지 않음
	 */
	private void init(int nCapa){
		m_arElement = new ArrayList<XmlElement>();
		
		setArrayCapacity(nCapa);
	}
	
	/**
	 * ArrayList가 delete, new 되지 않도록 Capacity를 설정한다.
	 * @param nCapa : 설정 할 Elements Number
	 */
	public void setArrayCapacity(int nCapa){
		if(m_arElement != null && nCapa > 0){
			m_arElement.ensureCapacity(nCapa);
		}
	}
	
	////////////////////////////////////////////////////////////
	// GionXmlElement을 배열에 추가한다. 
	////////////////////////////////////////////////////////////
	public void addXmlElement(XmlElement element){
		m_arElement.add(element);	
	}
	
	////////////////////////////////////////////////////////////
	// ArrayList에 저장된 GionXmlElement를 반환 (index 사용)
	////////////////////////////////////////////////////////////
	public XmlElement getXmlElement(int nIdx){
		// 해당 인덱스를 가진 GionXmlElement를 리턴한다.
		return m_arElement.get(nIdx); 
	}
	
	////////////////////////////////////////////////////////////
	// ArrayList에 저장된 GionXmlElement를 반환 (Name 사용) 
	////////////////////////////////////////////////////////////
	public XmlElement getXmlElement(String szFindName){
		
		// 찾고자하는 Name을 가진 GionXmlElement 찾는다.
		for(int nIdx = 0; nIdx < m_arElement.size(); nIdx++){

			XmlElement element = m_arElement.get(nIdx); 

			// 찾은 경우 해당 GionXmlElement을 리턴한다. 
			if(element.GetName().equals(szFindName)){
				return element;
			}
		}
		
		return null;
	}

	public String getXmlElementData(String szXmlElementName){
		
		XmlElement element = getXmlElement(szXmlElementName);
		
		if(element != null){
			return element.GetData();
		}
		return null;
	}

	
	///////////////////////////////////////////////////////////
	// getter, stter
	///////////////////////////////////////////////////////////
	public void setTag(Object obj){
		m_tagObj = obj;
	}
	
	public Object getTag(){
		return m_tagObj;
	}

	
	public void setTagEx(Object obj){
		m_tagObjEx = obj;
	}
	
	public Object getTagEx(){
		return m_tagObjEx;
	}

	
	
	public void setIntTag(int nValue){
		m_nTag = nValue;
	}
	
	public int getIntTag(){
		return m_nTag;
	}
	
	public void clearData(){
		m_arElement.clear();		
	}
	
	
	
	////////////////////////////////////////////////////////////
	// ArrayList에 저장된 GionXmlElement의 Count를 반환한다. 
	////////////////////////////////////////////////////////////
	public int getXmlElementCount() { return m_arElement.size(); }
	
}
